根據 FORTH:慶的世界 2008年11月29日的貼文,有整理一篇 F83 標準指令。該網站的作者,曾慶潭先生曾任中華民國符式語言學會的理事長,擅長 Forth 語言數值分析程式設計,他的 Blogger 網站有相當豐富的 Forth 程式設計經驗分享,非常值得一看。
https://forthfortnight.blogspot.com/2008/11/forth-83_252.html
我們在此將文件重新編輯,改成表格形式,方便讀者後續章節可以拿來參考使用。
類別 | 指令 | 堆疊註解 / 說明 |
---|---|---|
堆疊操作指令 | DUP |
( n - n , n ) 複製堆疊頂端之值。 |
堆疊操作指令 | DROP |
( n - ) 丟棄堆疊頂端之值。 |
堆疊操作指令 | SWAP |
( n1 , n2 - n2 , n1 ) 互換堆疊頂上兩值。 |
堆疊操作指令 | OVER |
( n1 , n2 - n1 , n2 , n1 ) 複製 n1 到頂端。 |
堆疊操作指令 | ROT |
( n1 , n2 , n3 - n2 , n3 , n1 ) 將 n1 旋轉到頂端。 |
堆疊操作指令 | PICK |
( . . . +i - . . . n ) 複製 n(i) 到頂端。 |
堆疊操作指令 | ROLL |
( . . . +i - . . . ) 將 n(i) 旋轉到頂端。 |
堆疊操作指令 | ?DUP |
( n - 0 |
堆疊操作指令 | DEPTH |
( - +n ) 取得堆疊深度。 |
堆疊操作指令 | >R |
( n1 - ) 將 n1 推入回返堆疊。 |
堆疊操作指令 | R@ |
( - n1 ) 從回返堆疊複製值。 |
堆疊操作指令 | R> |
( - n1 ) 從回返堆疊取回值。 |
記憶體操作指令 | @ |
( addr - n ) 取得記憶體中 16 位元內容(飛取)。 |
記憶體操作指令 | C@ |
( addr - c ) 取得記憶體中 8 位元內容。 |
記憶體操作指令 | ! |
( n , addr - ) 將 n 存入記憶體。 |
記憶體操作指令 | C! |
( c , addr - ) 將 c 存入記憶體。 |
記憶體操作指令 | +! |
( n , addr - ) 將 n 加到記憶體內容。 |
記憶體操作指令 | CMOVE |
( addr1 , addr2 , u - ) 由 addr1 搬移 u 個字元到 addr2,低效先搬。 |
記憶體操作指令 | CMOVE> |
( addr1 , addr2 , u - ) 高效位址先搬。 |
記憶體操作指令 | FILL |
( addr , u , c - ) 從 addr 開始填入 u 個字元為 c。 |
算術運算操作指令 | + |
( n1 , n2 - sum ) 相加。 |
算術運算操作指令 | - |
( n1 , n2 - diff ) 相減。 |
算術運算操作指令 | * |
( n1 , n2 - product ) 相乘。 |
算術運算操作指令 | / |
( n1 , n2 - quotient ) 相除 (餘數捨去)。 |
算術運算操作指令 | MOD |
( n1 , n2 - remainder ) 求餘數。 |
算術運算操作指令 | /MOD |
( n1 , n2 - rem , quot ) 同時求商與餘數。 |
算術運算操作指令 | 1+ |
( n1 - n2 ), n2 = n1 + 1。 |
算術運算操作指令 | 1- |
( n1 - n2 ), n2 = n1 − 1。 |
算術運算操作指令 | 2+ |
( n1 - n2 ), n2 = n1 + 2。 |
算術運算操作指令 | 2- |
( n1 - n2 ), n2 = n1 − 2。 |
算術運算操作指令 | 2/ |
( n1 - n2 ) 有號數除以 2。 |
算術運算操作指令 | ABS |
( n1 - u1 ) 絕對值。 |
算術運算操作指令 | NEGATE |
( n1 - n2 ), n2 = 0 − n1。 |
算術運算操作指令 | MAX |
( n1 , n2 - maximum ) 較大者。 |
算術運算操作指令 | MIN |
( n1 , n2 - minimum ) 較小者。 |
算術運算操作指令 | UM* |
( u1 , u2 - ud-product ) 無號數相乘。 |
算術運算操作指令 | UM/MOD |
( u1 , u2 - u-rem , u-quo ) 與 /MOD 相似,但為無號數。 |
算術運算操作指令 | D+ |
( dn1 , dn2 - dn-sum ) 雙整數加法。 |
算術運算操作指令 | DNEGATE |
( dn1 - dn2 ) 雙整數負值。 |
算術運算操作指令 | */ |
( n1 , n2 , n3 - quot ) 先乘再除,過度中間為雙整數。 |
邏輯運算操作指令 | AND |
( n1 , n2 - n1 AND n2 ) 位元“且”。 |
邏輯運算操作指令 | OR |
( n1 , n2 - n1 OR n2 ) 位元“或”。 |
邏輯運算操作指令 | XOR |
( n1 , n2 - n1 XOR n2 ) 位元“異或”。 |
邏輯運算操作指令 | NOT |
( n1 - not-n1 ) 位元“非”。 |
比較運算操作指令 | < |
( n1 , n2 - f ) 若 n1 < n2 為真。 |
比較運算操作指令 | > |
( n1 , n2 - f ) 若 n1 > n2 為真。 |
比較運算操作指令 | = |
( n1 , n2 - f ) 若 n1 = n2 為真。 |
比較運算操作指令 | 0< |
( n - f ) 若 n 為負數為真。 |
比較運算操作指令 | 0> |
( n - f ) 若 n 為正數為真。 |
比較運算操作指令 | 0= |
( n - f ) 若 n = 0 為真。 |
比較運算操作指令 | u< |
( u1 , u2 - f ) 無號數比較 u1 < u2 為真。 |
比較運算操作指令 | d< |
( d1 , d2 - f ) 雙字比較 d1 < d2 為真。 |
流程控制操作指令 | QUIT |
( - ) 清除回返堆疊,設定系統為解譯狀態。 |
流程控制操作指令 | ABORT |
( - ) 放棄執行,清除數據堆疊並執行 QUIT。 |
流程控制操作指令 | BEGIN … UNTIL |
重複執行 … 直到條件為真。 |
流程控制操作指令 | BEGIN … WHILE … REPEAT |
重複 … 若條件為假則執行分支 … 重複。 |
流程控制操作指令 | IF … THEN |
若條件為真則執行 THEN 前之部分。 |
流程控制操作指令 | IF … ELSE … THEN |
真則執行 IF 部分,否則 ELSE 部分。 |
流程控制操作指令 | DO … LOOP |
從起始值到上限重複。 |
流程控制操作指令 | DO … +LOOP |
起始到上限,且每次增加指定步長。 |
流程控制操作指令 | LEAVE |
離開 DO…LOOP 迴圈。 |
流程控制操作指令 | EXIT |
離開定義指令 (不在 DO…LOOP/+LOOP 中)。 |
流程控制操作指令 | I |
回傳最內層 DO…LOOP 的指標值。 |
流程控制操作指令 | J |
回傳次內層 DO…LOOP 的指標值。 |
輸入與輸出操作指令 | KEY |
( - c ) 從輸入裝置讀取一個 ASCII 值。 |
輸入與輸出操作指令 | EXPECT |
( addr , +n - ) 讀取 n 個字或直到回車鍵,放入 addr 開始的緩衝區。 |
輸入與輸出操作指令 | SPAN |
( - addr ) 取得最近執行之 EXPECT 的實際字數緩衝位置。 |
輸入與輸出操作指令 | EMIT |
( c - ) 顯示一個 ASCII 字元。 |
輸入與輸出操作指令 | TYPE |
( string - ) 顯示字串。 |
輸入與輸出操作指令 | CR |
( - ) 換列。 |
輸入與輸出操作指令 | SPACE |
( - ) 顯示空白。 |
輸入與輸出操作指令 | SPACES |
( n - ) 顯示 n 個空白。 |
輸入與輸出操作指令 | . |
( n - ) 顯示 n,有負數時前置負號。 |
輸入與輸出操作指令 | U. |
( u - ) 顯示無號數 u。 |
轉換操作指令 | BASE |
( - addr ) 基底數存放位址。 |
轉換操作指令 | DECIMAL |
( - ) 設定為十進制基底。 |
轉換操作指令 | PAD |
( - addr ) 臨時緩衝區位址 (至少84字元)。 |
轉換操作指令 | WORD |
( c - addr ) 從輸入中讀入封包字串,界定字元為 c,或者到字串末尾。 |
轉換操作指令 | COUNT |
( addr - string ) 非包封字串,長度在 addr,字元從 addr+1 開始。 |
轉換操作指令 | -TRAILING |
( string1 - string2 ) 去掉字串尾部之空白。 |
轉換操作指令 | CONVERT |
( +d1 , addr1 - +d2 , addr2 ) 將字串轉為數字,加到 d1 上,直到遇到非數字字母為止。 |
數字輸出轉換操作指令 | <# |
( d1 - d1 ) 設定轉換開始。 |
數字輸出轉換操作指令 | # |
( d1 - d2 ) 削剖 d1 的一位数字。 |
數字輸出轉換操作指令 | #S |
( d1 – 0 , 0 ) 將剩餘所有數位削出。 |
數字輸出轉換操作指令 | HOLD |
( d1 , c - d1 ) 將字元 c 加到字串中。 |
數字輸出轉換操作指令 | SIGN |
( d1 - d1 , n ) 若 n<0 則加負號到字串前。 |
數字輸出轉換操作指令 | #> |
( d1 - string ) 結束轉換並留下字串。 |
詞典操作指令 | ' name |
( - cfa ) 遞給 name 指令的 cfa。 |
詞典操作指令 | FIND |
( addr - cfa , f ) 搜尋字典,若找到。 |
詞典操作指令 | EXECUTE |
( cfa - ) 執行該 cfa 指令。 |
詞典操作指令 | >BODY |
( cfa - pfa ) 取得 pfa。 |
詞典操作指令 | HERE |
( - addr ) 下一個可用字典位址。 |
詞典操作指令 | ALLOT |
( n - ) 保留字典空間。 |
詞典操作指令 | , |
( n - ) 將 n 編譯入字典。 |
詞典操作指令 | FORTH |
( - ) 設為第一搜尋字彙名詞。 |
詞典操作指令 | DEFINITIONS |
( - ) 設定搜尋順序中第一個字彙。 |
詞典操作指令 | FORGET name |
( - ) 刪除 name 與之後的指令定義。 |
編譯操作指令 | STATE |
( - addr ) 表示是否為編譯狀態。 |
編譯操作指令 | [ |
( - ) 設系統為解譯狀態。 |
編譯操作指令 | ] |
( - ) 回復編譯狀態。 |
編譯操作指令 | IMMEDIATE |
( - ) 最近定義指令為立即指令。 |
編譯操作指令 | : name ; |
定義新的字彙。 |
編譯操作指令 | CREATE name |
建立資料結構名稱。 |
編譯操作指令 | DOES> x1 |
將指令的後續行為修改為 x1(立即型態)。 |
編譯操作指令 | CONSTANT name |
建立一個常數。 |
編譯操作指令 | VARIABLE name |
建立一個變數。 |
編譯操作指令 | VOCABULARY name |
建立一個詞彙表。 |
限編譯狀態且立即執行指令 | .\" ccc \" |
編譯字串 ccc,執行時輸出。 |
限編譯狀態且立即執行指令 | ABORT\" ccc \" |
若旗號為真則輸出字串並放棄執行。 |
限編譯狀態且立即執行指令 | LITERAL |
將數值編譯入堆疊。 |
限編譯狀態且立即執行指令 | ['] name |
將 name 的 cfa 視為數值編譯。 |
限編譯狀態且立即執行指令 | [COMPILE] name |
編譯時插入 name 的 cfa。 |
限編譯狀態且立即執行指令 | COMPILE name |
在定義中編譯 name 指令。 |
周邊裝置操作指令 | BLOCK |
( u - addr ) 讀取區塊到緩衝區。 |
周邊裝置操作指令 | BUFFER |
( u - addr ) 設定緩衝區。 |
周邊裝置操作指令 | UPDATE |
( - ) 標定最近使用區塊以便寫回。 |
周邊裝置操作指令 | SAVE-BUFFERS |
( - ) 寫回所有緩衝區。 |
周邊裝置操作指令 | FLUSH |
( - ) 關閉所有開啟檔案。 |
周邊裝置操作指令 | TIB |
( - addr ) 輸入字串的位址。 |
周邊裝置操作指令 | #TIB |
( - addr ) 最近輸入字元數目位址。 |
周邊裝置操作指令 | BLK |
( - addr ) 輸入區塊位址。 |
周邊裝置操作指令 | >IN |
( - addr ) 輸入偏移位址。 |
周邊裝置操作指令 | LOAD |
( u - ) 載入區塊 u 並重設輸入來源。 |